﻿using System.Collections.Generic;
using System.Data;

namespace Amoo.Code.Data
{
    public class Comunidade:BaseData
    {

        public Entity.Comunidade GetbyID(Entity.Comunidade pComunidade)
        {
            IDataReader dr = ExecuteReader(@"SELECT idComunidade, dsNomeComunidade, dtDataCriacao, dtDataExpiracao,
            bolDataExpira, bolComunidadePaga, bolComunidadeAtiva, bolApareceNoMenu,
            dsPalavrasBusca, idComunidadePai, TipoComunidade, PerfilComunidade, isRegional
            FROM comunidade where idComunidade='" + pComunidade.idComunidade + "'");

            if (dr != null)
            {

                if (dr.Read())
                {
                    return Entity.Comunidade.Load(dr);
                }
                else
                    return null;

            }
            return null;
        }

        public Entity.Comunidade GetIdbyName(Entity.Comunidade pComunidade)
        {
            IDataReader dr = ExecuteReader(@"SELECT idComunidade, dsNomeComunidade, dtDataCriacao, dtDataExpiracao,
            bolDataExpira, bolComunidadePaga, bolComunidadeAtiva, bolApareceNoMenu,
            dsPalavrasBusca, idComunidadePai, TipoComunidade, PerfilComunidade, isRegional
            FROM comunidade where dsNomeComunidade='" + pComunidade.dsNomeComunidade + "'");
            
            if (dr != null)
            {

                if (dr.Read())
                {
                    return Entity.Comunidade.Load(dr);
                }
                else
                    return null;
    
            }
            return null;
        }
        
        
        public List<Entity.Comunidade> GetAll()
        {
            IDataReader dr = ExecuteReader(@"SELECT idComunidade, dsNomeComunidade, dtDataCriacao, dtDataExpiracao,
            bolDataExpira, bolComunidadePaga, bolComunidadeAtiva, bolApareceNoMenu,
            dsPalavrasBusca, idComunidadePai, TipoComunidade, PerfilComunidade, isRegional
            FROM comunidade");
            List<Entity.Comunidade> returnVal = new List<Entity.Comunidade>();
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.Comunidade.Load(dr));
                }
            }
            return returnVal;
        }

        /// <summary>
        /// Lista as comunidades do tipo regionais para popular as hierarquias.
        /// </summary>
        /// <param name="sTipoComunidade"></param>
        /// <returns></returns>
        public List<Entity.Comunidade> GetAll(string sTipoComunidade)
        {
            IDataReader dr = ExecuteReader(@"SELECT idComunidade, dsNomeComunidade, dtDataCriacao, dtDataExpiracao,
            bolDataExpira, bolComunidadePaga, bolComunidadeAtiva, bolApareceNoMenu,
            dsPalavrasBusca, idComunidadePai, TipoComunidade, PerfilComunidade, isRegional
            FROM comunidade
            where tipocomunidade = '" + sTipoComunidade + "' and isRegional=1");
            List<Entity.Comunidade> returnVal = new List<Entity.Comunidade>();
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.Comunidade.Load(dr));
                }
            }
            return returnVal;
        }


        public List<Entity.Comunidade> GetAll(int pIDComunidadePai, int isRegional)
        {
            IDataReader dr = ExecuteReader(@"SELECT idComunidade, dsNomeComunidade, dtDataCriacao, dtDataExpiracao,
            bolDataExpira, bolComunidadePaga, bolComunidadeAtiva, bolApareceNoMenu,
            dsPalavrasBusca, idComunidadePai, TipoComunidade, PerfilComunidade, isRegional
            FROM comunidade
            where IDComunidadePai = " + pIDComunidadePai.ToString() + " and isRegional = " + isRegional.ToString());
            List<Entity.Comunidade> returnVal = new List<Entity.Comunidade>();
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.Comunidade.Load(dr));
                }
            }
            return returnVal;
        }
        
        public List<Entity.Comunidade> GetAll(int pIDComunidadePai)
        {
            IDataReader dr = ExecuteReader(@"SELECT idComunidade, dsNomeComunidade, dtDataCriacao, dtDataExpiracao,
            bolDataExpira, bolComunidadePaga, bolComunidadeAtiva, bolApareceNoMenu,
            dsPalavrasBusca, idComunidadePai, TipoComunidade, PerfilComunidade, isRegional
            FROM comunidade
            where IDComunidadePai = " + pIDComunidadePai);
            List<Entity.Comunidade> returnVal = new List<Entity.Comunidade>();
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.Comunidade.Load(dr));
                }
            }
            return returnVal;
        }

        public List<Entity.Comunidade> GetForHome()
        {
            IDataReader dr = ExecuteReader(@"select idComunidade, dsNomeComunidade, dtDataCriacao, dtDataExpiracao,
            bolDataExpira, bolComunidadePaga, bolComunidadeAtiva, bolApareceNoMenu,
            dsPalavrasBusca, idComunidadePai, TipoComunidade, PerfilComunidade, isRegional
            FROM comunidade where bolComunidadeAtiva = 1
            ORDER BY idComunidade DESC LIMIT 10");
            List<Entity.Comunidade> returnVal = new List<Entity.Comunidade>();
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.Comunidade.Load(dr));
                }
            }
            return returnVal;
        }

        public List<Entity.Comunidade> GetAll(Entity.Usuario pUsuario)
        {
            List<Entity.Comunidade> returnVal = new List<Entity.Comunidade>();
            IDataReader dr = ExecuteReader(@"select comunidade.* 
                                               from comunidade, usuario_comunidade 
                                              where comunidade.idcomunidade = usuario_comunidade.idcomunidade
                                                    and usuario_comunidade.idusuario = " + pUsuario.idUsuario.ToString() + @"
                                              order by idComunidade desc");
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.Comunidade.Load(dr));
                }
            }
            return returnVal;
        }

        public List<Entity.Comunidade> GetAll(Entity.Usuario pUsuario, int pPropriedade)
        {
            List<Entity.Comunidade> returnVal = new List<Entity.Comunidade>();
            IDataReader dr = ExecuteReader(@"select comunidade.* 
                                               from comunidade, usuario_comunidade 
                                              where comunidade.idcomunidade = usuario_comunidade.idcomunidade
                                                    and usuario_comunidade.bolUsuarioProprietario=" + pPropriedade.ToString() + @" 
                                                    and usuario_comunidade.idusuario = " + pUsuario.idUsuario.ToString() + @"
                                              order by idComunidade desc");
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.Comunidade.Load(dr));
                }
            }
            return returnVal;
        }

        public Entity.UsuarioComunidade GetPermissionbyUser(int pIdComunidade, int pIdUsuario)
        {
            IDataReader dr = ExecuteReader(@"select usuario_comunidade.* 
                                               from usuario_comunidade 
                                              where usuario_comunidade.idcomunidade = " + pIdComunidade.ToString() + @"
                                                    and usuario_comunidade.idusuario = " + pIdUsuario.ToString());

            if (dr != null)
            {

                if (dr.Read())
                {
                    return Entity.UsuarioComunidade.Load(dr);
                }
                else
                    return null;

            }
            return null;
        }


        internal void Alterar(Code.Entity.Comunidade pComunidade)
        {
            string query = @"UPDATE comunidade SET 
                            dsNomeComunidade = '" + pComunidade.dsNomeComunidade + @"', 
                            bolComunidadePaga = " + (pComunidade.bolComunidadePaga ? 1:0) + @", 
                            bolComunidadeAtiva = " + (pComunidade.bolComunidadeAtiva ? 1:0) + @", 
                            bolApareceNoMenu = " + (pComunidade.bolApareceNoMenu ? 1 : 0) + @", 
                            dsPalavrasBusca = '" + pComunidade.dsPalavrasBusca + @"'
                    WHERE idComunidade = " + pComunidade.idComunidade;
            Execute(query);
        }

        
        /// <summary>
        /// Insere na tabela comunidade
        /// </summary>
        /// <param name="pComunidade"></param>
        internal void Insert(Code.Entity.Comunidade pComunidade)
        {
            string query = @"INSERT INTO comunidade (dsNomeComunidade, dtDataCriacao, dtDataExpiracao,
                                                        bolDataExpira, bolComunidadePaga, bolComunidadeAtiva, bolApareceNoMenu, 
                                                        dsPalavrasBusca, idComunidadePai, TipoComunidade, PerfilComunidade, isRegional)
                                                    VALUES ('{0}', sysdate(), ADDDATE(sysdate(), INTERVAL 20 YEAR), 
                                                                0, 0, {6}, 
                                                                0, '{1}', {2}, '{3}', '{4}', {5})";

            int ativo = 0;
            if (pComunidade.bolComunidadeAtiva)
                ativo = 1;

            query = string.Format(query, pComunidade.dsNomeComunidade, pComunidade.dsPalavrasBusca, pComunidade.idComunidadePai, pComunidade.dsTipoComunidade, pComunidade.dsPerfilComunidade, pComunidade.isRegional, ativo);
            Execute(query);
        }

        /// <summary>
        /// Insere para o relacionamento entre usuario e comunidade
        /// </summary>
        /// <param name="pComunidade"></param>
        /// <param name="pUsuario"></param>
        internal void Insert(Code.Entity.Comunidade pComunidade, Code.Entity.Usuario pUsuario)
        {
            string query = @"INSERT INTO usuario_comunidade (idUsuario, idComunidade, bolUsuarioProprietario, bolPodeConteudo, bolPodeNoticia, bolPodeBanner)
                   VALUES ('{0}', {1}, 1, 1, 1, 1)";
            query = string.Format(query, pUsuario.idUsuario, pComunidade.idComunidade);
            Execute(query);
        }


        internal void Insert(Code.Entity.UsuarioComunidade pUsuario)
        {
            string query = @"INSERT INTO usuario_comunidade (idUsuario, idComunidade, bolUsuarioProprietario, bolPodeConteudo, bolPodeNoticia, bolPodeBanner)
                   VALUES ({0}, {1}, {2}, {3}, {4}, {5})";

            int bolUsuarioProprietario = 0;
            int bolPodeConteudo = 0;
            int bolPodeNoticia = 0;
            int bolPodeBanner = 0;
            if (pUsuario.bolUsuarioProprietario)
            {
                bolUsuarioProprietario = 1;
            }
            if (pUsuario.bolPodeConteudo)
            {
                bolPodeConteudo = 1;
            }
            if (pUsuario.bolPodeNoticia)
            {
                bolPodeNoticia = 1;
            }
            if (pUsuario.bolPodeBanner)
            {
                bolPodeBanner = 1;
            }

            query = string.Format(query, pUsuario.idUsuario, pUsuario.idComunidade, bolUsuarioProprietario, bolPodeConteudo, bolPodeNoticia, bolPodeBanner);
            Execute(query);
        }

        internal void Update(Code.Entity.UsuarioComunidade pUsuario)
        {
            string query = @"UPDATE usuario_comunidade SET bolUsuarioProprietario = {2}, bolPodeConteudo = {3}, bolPodeNoticia = {4}, bolPodeBanner = {5} WHERE idUsuario = {0} and idComunidade = {1}";

            int bolUsuarioProprietario = 0;
            int bolPodeConteudo = 0;
            int bolPodeNoticia = 0;
            int bolPodeBanner = 0;

            if (pUsuario.bolUsuarioProprietario)
            {
                bolUsuarioProprietario = 1;
            }
            if (pUsuario.bolPodeConteudo)
            {
                bolPodeConteudo = 1;
            }
            if (pUsuario.bolPodeNoticia)
            {
                bolPodeNoticia = 1;
            }
            if (pUsuario.bolPodeBanner)
            {
                bolPodeBanner = 1;
            }

            query = string.Format(query, pUsuario.idUsuario, pUsuario.idComunidade, bolUsuarioProprietario, bolPodeConteudo, bolPodeNoticia, bolPodeBanner);
            Execute(query);
        }

        public List<Entity.UsuarioComunidade> GetAllUsuarioComunidade()
        {
            List<Entity.UsuarioComunidade> returnVal = new List<Entity.UsuarioComunidade>();
            IDataReader dr = ExecuteReader(@"select idUsuario, idComunidade, bolUsuarioProprietario, bolPodeConteudo, bolPodeNoticia, bolPodeBanner from usuario_comunidade");
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.UsuarioComunidade.Load(dr));
                }
            }
            return returnVal;
        }

        public List<Entity.UsuarioComunidade> GetAllUsuarioComunidade(Entity.Usuario oUser)
        {
            List<Entity.UsuarioComunidade> returnVal = new List<Entity.UsuarioComunidade>();
            IDataReader dr = ExecuteReader(@"select idUsuario, idComunidade, bolUsuarioProprietario, bolPodeConteudo, bolPodeNoticia, bolPodeBanner from usuario_comunidade where idUsuario = " + oUser.idUsuario);
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.UsuarioComunidade.Load(dr));
                }
            }
            return returnVal;
        }

        public bool UsuarioComunidadeExistente(Entity.UsuarioComunidade oUsuarioComunidade)
        {
            bool ret = false;

            IDataReader dr = ExecuteReader(@"select idUsuario, idComunidade, bolUsuarioProprietario, bolPodeConteudo, bolPodeNoticia, bolPodeBanner from usuario_comunidade where idUsuario = " + oUsuarioComunidade.idUsuario + " and idComunidade = " + oUsuarioComunidade.idComunidade );
            if (dr != null)
            {
                if (dr.Read())
                {
                    ret = true;
                    
                }
            }
            return ret;
        }

        public List<Entity.Comunidade> GetOthers(Entity.Usuario pUsuario)
        {
            List<Entity.Comunidade> returnVal = new List<Entity.Comunidade>();
            IDataReader dr = ExecuteReader(@"select comunidade.* 
                                               from comunidade, usuario_comunidade 
                                              where comunidade.idcomunidade = usuario_comunidade.idcomunidade 
                                                    and usuario_comunidade.idusuario <> " + pUsuario.idUsuario.ToString() + @"
                                              order by idComunidade desc");
            if (dr != null)
            {
                while (dr.Read())
                {
                    returnVal.Add(Entity.Comunidade.Load(dr));
                }
            }
            return returnVal;
        }

    
    }
}
